home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Demos / A.D. Software / OOFILE / Buildable, limited OOFILE / source / core / oof4.hpp < prev    next >
Text File  |  1996-03-24  |  15KB  |  447 lines

  1. #ifndef H_OOF4
  2. #define H_OOF4
  3.  
  4. // COPYRIGHT 1994 A.D. Software, All rights reserved
  5.  
  6. // OOFILE database numeric field-related classes
  7. // see also oof3.hpp
  8.  
  9. #include "oof3.hpp"
  10.  
  11. class dbReal;
  12. class dbShort;
  13. class dbLong;
  14. class dbQueryLiteral;
  15.  
  16. class dbNumericField : public dbField {
  17. protected:
  18.     dbNumericField() {};
  19. public:
  20.     dbNumericField(const OOF_IndexOptions); 
  21.       dbNumericField(const char *fieldName); 
  22.       dbNumericField(const char *fieldName, const OOF_IndexOptions);
  23.      dbNumericField(dbField::FieldIsStandaloneT k) : dbField(k) {}; 
  24.     // use default copy ctor
  25.     virtual ~dbNumericField() {};
  26.     
  27. // search factories
  28.     dbQueryBinary    operator==(long) const;
  29.     dbQueryBinary    operator<(long) const;
  30.     dbQueryBinary    operator<=(long) const;
  31.     dbQueryBinary    operator>=(long) const;
  32.     dbQueryBinary    operator>(long) const;
  33.     dbQueryBinary    operator!=(long) const;
  34.     dbQueryTrinary    between(long, long) const;
  35.     dbQueryTrinary    outside(long, long) const;
  36.  
  37.     void operator+=(long);
  38.     void operator-=(long);
  39.     void operator*=(long);
  40.     void operator/=(long);
  41.  
  42.     void operator+=(double);
  43.     void operator-=(double);
  44.     void operator*=(double);
  45.     void operator/=(double);
  46.     
  47. protected:
  48.     static void CheckRange(double d, long minL, long maxL, const char* file, int line);
  49.     static void CheckRange(long l, long minL, long maxL, const char* file, int line);
  50.     static void CheckRange(unsigned long l, unsigned long max, const char* file, int line);
  51.     virtual dbQueryLiteral* MakeQueryLiteral(long) const;
  52. };
  53.  
  54.  
  55.  
  56. class dbShort : public dbNumericField  {
  57. public:
  58.     dbShort() {};
  59.     dbShort(const OOF_IndexOptions); 
  60.     dbShort(const char *fieldName); 
  61.     dbShort(const char *fieldName, const OOF_IndexOptions);
  62.      dbShort(dbField::FieldIsStandaloneT k) : dbNumericField(k) {}; 
  63.     // use default copy ctor
  64.     virtual ~dbShort() {};
  65.     
  66. // reflective operators
  67.     virtual OOF_fieldTypes fieldType() const;
  68.     virtual unsigned long fieldLen() const;
  69.  
  70. // data access
  71.     virtual void setString(const char*);  
  72.     dbShort& operator=(short);  
  73.     dbShort& operator=(long);  
  74.     dbShort& operator=(int);  
  75.     dbShort& operator=(const dbShort&); // value copy 
  76.     dbShort& operator=(double);  
  77.     operator short() const;
  78.     virtual  void extract(ostream& os) const;
  79.     virtual bool insert(istream&, char fieldSep, char recSep);
  80.     virtual void copyValueFrom(const dbField*);
  81.  
  82.     virtual void generateTestData(const char* ignored, unsigned long ignoredLen);    
  83.     
  84. protected:
  85.     virtual dbQueryLiteral* MakeQueryLiteral(long) const;
  86. };
  87.  
  88.  
  89. class dbUshort : public dbNumericField  {
  90. public:
  91.     dbUshort() {};
  92.     dbUshort(const OOF_IndexOptions);
  93.     dbUshort(const char *fieldName);
  94.     dbUshort(const char *fieldName, const OOF_IndexOptions);
  95.      dbUshort(dbField::FieldIsStandaloneT k) : dbNumericField(k) {}; 
  96. // use default copy ctor
  97.     virtual ~dbUshort() {};
  98.     
  99. // reflective operators
  100.     virtual OOF_fieldTypes fieldType() const;
  101.     virtual unsigned long fieldLen() const;
  102.  
  103. // data access
  104.     virtual void setString(const char*);  
  105.     dbUshort& operator=(unsigned short);  
  106.     dbUshort& operator=(long);  
  107.     dbUshort& operator=(int);  
  108.     dbUshort& operator=(const dbUshort&); // value copy 
  109.     dbUshort& operator=(double);  
  110.     operator unsigned short() const;
  111.     virtual  void extract(ostream& os) const;
  112.     virtual bool insert(istream&, char fieldSep, char recSep);
  113.     virtual void copyValueFrom(const dbField*);
  114.  
  115.     virtual void generateTestData(const char* ignored, unsigned long ignoredLen);    
  116.     
  117. protected:
  118.     virtual dbQueryLiteral* MakeQueryLiteral(long) const;
  119. };
  120.  
  121.  
  122. class dbLong : public dbNumericField  {
  123. public:
  124.     dbLong()  {};
  125.     dbLong(const OOF_IndexOptions);
  126.     dbLong(const char *fieldName);
  127.      dbLong(const char *fieldName, const OOF_IndexOptions);
  128.        dbLong(dbField::FieldIsStandaloneT k) : dbNumericField(k) {}; 
  129.     // use default copy ctor
  130.     virtual ~dbLong() {};
  131.     
  132. // reflective operators
  133.     virtual OOF_fieldTypes fieldType() const;
  134.     virtual unsigned long fieldLen() const;
  135.     
  136. // data access
  137.     virtual void setString(const char*);  
  138.     dbLong& operator=(long);  
  139.     dbLong& operator=(int);  
  140.     dbLong& operator=(const dbLong&);  // value copy
  141.     dbLong& operator=(double);  
  142.     operator long() const;
  143.     virtual  void extract(ostream& os) const;
  144.     virtual bool insert(istream&, char fieldSep, char recSep);
  145.     virtual void copyValueFrom(const dbField*);
  146.  
  147.     virtual void generateTestData(const char* ignored, unsigned long ignoredLen);    
  148. };
  149.  
  150.  
  151. class dbUlong : public dbNumericField  {
  152. public:
  153.     dbUlong() {};
  154.     dbUlong(const OOF_IndexOptions);
  155.     dbUlong(const char *fieldName);
  156.     dbUlong(const char *fieldName, const OOF_IndexOptions);
  157.      dbUlong(dbField::FieldIsStandaloneT k) : dbNumericField(k) {}; 
  158. // use default copy ctor
  159.     virtual ~dbUlong() {};
  160.     
  161.     dbQueryBinary    operator==(unsigned long) const;
  162.  
  163. // reflective operators
  164.     virtual OOF_fieldTypes fieldType() const;
  165.     virtual unsigned long fieldLen() const;
  166.     
  167. // data access
  168.     virtual void setString(const char*);  
  169.     dbUlong& operator=(unsigned long);  
  170.     dbUlong& operator=(unsigned int);  
  171.     dbUlong& operator=(const dbUlong&);  // value copy
  172.     dbUlong& operator=(double);  
  173.     operator unsigned long() const;
  174.     virtual  void extract(ostream& os) const;
  175.     virtual bool insert(istream&, char fieldSep, char recSep);
  176.     virtual void copyValueFrom(const dbField*);
  177.  
  178.     virtual void generateTestData(const char* ignored, unsigned long ignoredLen);    
  179.     virtual dbQueryLiteral* MakeQueryLiteral(long n) const;
  180.     dbQueryLiteral* MakeQueryLiteral(unsigned long n) const;
  181. };
  182.  
  183.  
  184. class dbReal : public dbNumericField  {
  185. public:
  186.     dbReal();
  187.     dbReal(const OOF_IndexOptions indexOptions);
  188.     dbReal(const char *fieldName); 
  189.     dbReal(const char *fieldName, const OOF_IndexOptions indexOptions);
  190.     dbReal(const dbReal&);
  191.      dbReal(dbField::FieldIsStandaloneT k) : dbNumericField(k) {}; 
  192.     virtual ~dbReal();
  193.     virtual void deleteStandaloneStorage();
  194.  
  195.     void CompleteInit();
  196.     
  197. // reflective operators
  198.     virtual OOF_fieldTypes fieldType() const;
  199.     virtual unsigned long fieldLen() const;
  200.  
  201. // search factories
  202.     dbQueryBinary    operator==(double) const;
  203.     dbQueryBinary    operator<(double) const;
  204.     dbQueryBinary    operator<=(double) const;
  205.     dbQueryBinary    operator>=(double) const;
  206.     dbQueryBinary    operator>(double) const;
  207.     dbQueryBinary    operator!=(double) const;
  208.     dbQueryTrinary    between(double, double) const;
  209.     dbQueryTrinary    outside(double, double) const;
  210.  
  211. // data access
  212.     virtual void setString(const char*);  
  213.     dbReal& operator=(double);
  214.     dbReal& operator=(const dbReal&);  // value copy
  215.     operator double() const;
  216.     virtual  void extract(ostream& os) const;
  217.     virtual bool insert(istream&, char fieldSep, char recSep);
  218.     virtual void copyValueFrom(const dbField*);
  219.  
  220.     virtual void generateTestData(const char* ignored, unsigned long ignoredLen);    
  221.  
  222. protected:
  223.     virtual dbQueryLiteral* MakeQueryLiteral(long) const;
  224. };
  225.  
  226.  
  227. class dbDate : public dbNumericField {
  228. public:
  229.     enum dateFieldOrder {orderYMD, orderDMY, orderMDY};
  230.     dbDate() {};
  231.     dbDate(const OOF_IndexOptions indexOptions); 
  232.     dbDate(const char *fieldName);
  233.     dbDate(const char *fieldName, const OOF_IndexOptions indexOptions);  
  234.      dbDate(const dbDate& rhs); 
  235.      dbDate(dbField::FieldIsStandaloneT k) : dbNumericField(k) {}; 
  236.     virtual ~dbDate();
  237.  
  238. // arithmetic operators
  239.     dbDate& operator++ ();
  240.     dbDate& operator-- ();
  241.     dbDate& operator+= (int);
  242.     dbDate& operator-= (int);
  243.     
  244. // operators returning concrete dates
  245.     dbDate operator-(const dbDate&) const;
  246.     dbDate operator-(long) const;
  247.     dbDate operator+(const dbDate&) const;
  248.     dbDate operator+(long) const;
  249.     
  250. // search factories
  251.     dbQueryBinary    operator==(const char*) const;
  252.     dbQueryBinary    operator<(const char*) const;
  253.     dbQueryBinary    operator<=(const char*) const;
  254.     dbQueryBinary    operator>=(const char*) const;
  255.     dbQueryBinary    operator>(const char*) const;
  256.     dbQueryBinary    operator!=(const char*) const;
  257.     dbQueryTrinary    between(const char*, const char*) const;
  258.     dbQueryTrinary    outside(const char*, const char*) const;
  259.  
  260.     dbQueryBinary    operator==(const dbDate&) const;
  261.     dbQueryBinary    operator<(const dbDate&) const;
  262.     dbQueryBinary    operator<=(const dbDate&) const;
  263.     dbQueryBinary    operator>=(const dbDate&) const;
  264.     dbQueryBinary    operator>(const dbDate&) const;
  265.     dbQueryBinary    operator!=(const dbDate&) const;
  266.     dbQueryTrinary    between(const dbDate&, const dbDate&) const;
  267.     dbQueryTrinary    outside(const dbDate&, const dbDate&) const;
  268.     
  269.  
  270. // reflective operators
  271.     virtual unsigned long fieldLen() const;
  272.     virtual OOF_fieldTypes fieldType() const;
  273.     virtual OOF_fieldTypes nativeType() const;
  274.  
  275. // data access
  276.  
  277. // getters
  278.     unsigned short day() const;
  279.     unsigned short month() const;
  280.     unsigned short year() const;
  281.     operator unsigned long() const;
  282. #ifdef _Macintosh
  283.     void asStr255(Str255 s) const;
  284. #endif
  285.     virtual  void extract(ostream& os) const;  // as "YYYY/MM/DD"
  286.     unsigned long daynum() const;
  287.  
  288. // setters
  289.     virtual void copyValueFrom(const dbField*);
  290.     virtual void setString(const char*);  
  291. #ifdef _Macintosh
  292.     void setStr255(const Str255 s);
  293. #endif
  294.     dbDate& operator=(const char* str);  // "YYYY MM DD" 
  295.     dbDate& operator=(const dbDate& rhs);
  296.     void setDate(unsigned long);
  297.     virtual bool insert(istream&, char fieldSep, char recSep);
  298.     void setDate(unsigned short year, unsigned short month, unsigned short day);
  299.     void getDate(unsigned short& year, unsigned short& month, unsigned short& day) const;
  300.     void setDateToCurrentDate();
  301.     void setDaynum(unsigned long);
  302.  
  303.     virtual void generateTestData(const char* ignored, unsigned long ignoredLen);
  304.     
  305. public:
  306.     static dateFieldOrder sDefaultDateOrder;
  307.     static void long2ymd(unsigned long binaryDate, unsigned short&, unsigned short&, unsigned short&);
  308.     static bool istream2ymd(istream& is, unsigned short&, unsigned short&, unsigned short&, dateFieldOrder theOrder=dbDate::sDefaultDateOrder);    
  309.     static bool istream2ymd(istream& is, unsigned short&, unsigned short&, unsigned short&, char fieldSep, char recordSep,  dateFieldOrder theOrder=dbDate::sDefaultDateOrder);    
  310.     static bool chars2ymd(const char*, unsigned short&, unsigned short&, unsigned short&, dateFieldOrder theOrder=dbDate::sDefaultDateOrder);
  311.     static void daynum2ymd(unsigned long, unsigned short&,unsigned short&,unsigned short&);
  312.  
  313.     static unsigned long chars2Long(const char*, dateFieldOrder theOrder=dbDate::sDefaultDateOrder);
  314.     static unsigned long ymd2Long(unsigned short, unsigned short, unsigned short);
  315.     static unsigned long ymd2daynum(unsigned short,unsigned short,unsigned short);
  316.     static ostream& ymd2Stream(unsigned short, unsigned short, unsigned short, ostream& os);
  317.     static unsigned short istream2month(istream&);
  318.     static unsigned short chars2month (const char *);
  319.     
  320.     static bool checkDate(unsigned short year, unsigned short month, unsigned short day);
  321.  
  322. // current date
  323.     static dbDate currentDate();
  324.     static void currentDate2ymd(unsigned short&, unsigned short&, unsigned short&);
  325.     static ostream& today(ostream& os);
  326.     static unsigned short currentCentury();
  327.     static unsigned short currentDay();
  328.     static unsigned short currentMonth();
  329.     static unsigned short currentYear();
  330. };
  331. long operator- (const dbDate&, const dbDate&);
  332.  
  333.  
  334. // STANDALONE FIELD TYPES
  335. class oofChar : public dbChar
  336. {
  337. public:
  338.      oofChar(long fieldWidth = 80) : dbChar(dbField::eFieldIsStandalone, fieldWidth) {}; 
  339.      oofChar(const dbChar& rhs) : dbChar(dbField::eFieldIsStandalone, rhs.fieldLen()) { dbChar::operator=(rhs); }; 
  340.     virtual ~oofChar() {};
  341.     
  342.     oofChar& operator=(const oofChar& rhs) { dbChar::operator=(rhs); return *this; };
  343.     oofChar& operator=(const dbChar& rhs) { dbChar::operator=(rhs); return *this; };
  344. };
  345.  
  346.  
  347. class oofText : public dbText
  348. {
  349. public:
  350.      oofText() : dbText(dbField::eFieldIsStandalone) {}; 
  351.      oofText(const dbText& rhs) : dbText(dbField::eFieldIsStandalone) { dbText::operator=(rhs); }; 
  352.     virtual ~oofText() {};
  353.     
  354.     oofText& operator=(const oofText& rhs) { dbText::operator=(rhs); return *this; };
  355.     oofText& operator=(const dbText& rhs) { dbText::operator=(rhs); return *this; };
  356. };
  357.  
  358.  
  359. class oofBLOB : public dbBLOB
  360. {
  361. public:
  362.      oofBLOB() : dbBLOB(dbField::eFieldIsStandalone) {}; 
  363.      oofBLOB(const dbBLOB& rhs) : dbBLOB(dbField::eFieldIsStandalone) { dbBLOB::operator=(rhs); }; 
  364.     virtual ~oofBLOB() {};
  365.     
  366.     oofBLOB& operator=(const oofBLOB& rhs) { dbBLOB::operator=(rhs); return *this; };
  367.     oofBLOB& operator=(const dbBLOB& rhs) { dbBLOB::operator=(rhs); return *this; };
  368. };
  369.  
  370.  
  371. class oofDate : public dbDate
  372. {
  373. public:
  374.      oofDate() : dbDate(dbField::eFieldIsStandalone) {}; 
  375.      oofDate(const dbDate& rhs) : dbDate(dbField::eFieldIsStandalone) { dbDate::operator=(rhs); }; 
  376.     virtual ~oofDate() {};
  377.     
  378.     oofDate& operator=(const oofDate& rhs) { dbDate::operator=(rhs); return *this; };
  379.     oofDate& operator=(const dbDate& rhs) { dbDate::operator=(rhs); return *this; };
  380. };
  381.  
  382.  
  383. class oofLong : public dbLong
  384. {
  385. public:
  386.      oofLong() : dbLong(dbField::eFieldIsStandalone) {}; 
  387.      oofLong(const dbLong& rhs) : dbLong(dbField::eFieldIsStandalone) { dbLong::operator=(rhs); }; 
  388.     virtual ~oofLong() {};
  389.     
  390.     oofLong& operator=(const oofLong& rhs) { dbLong::operator=(rhs); return *this; };
  391.     oofLong& operator=(const dbLong& rhs) { dbLong::operator=(rhs); return *this; };
  392. };
  393.  
  394.  
  395. class oofUlong : public dbUlong
  396. {
  397. public:
  398.      oofUlong() : dbUlong(dbField::eFieldIsStandalone) {}; 
  399.      oofUlong(const dbUlong& rhs) : dbUlong(dbField::eFieldIsStandalone) { dbUlong::operator=(rhs); }; 
  400.     virtual ~oofUlong() {};
  401.     
  402.     oofUlong& operator=(const oofUlong& rhs) { dbUlong::operator=(rhs); return *this; };
  403.     oofUlong& operator=(const dbUlong& rhs) { dbUlong::operator=(rhs); return *this; };
  404. };
  405.  
  406.  
  407. class oofShort : public dbShort
  408. {
  409. public:
  410.      oofShort() : dbShort(dbField::eFieldIsStandalone) {}; 
  411.      oofShort(const dbShort& rhs) : dbShort(dbField::eFieldIsStandalone) { dbShort::operator=(rhs); }; 
  412.     virtual ~oofShort() {};
  413.     
  414.     oofShort& operator=(const oofShort& rhs) { dbShort::operator=(rhs); return *this; };
  415.     oofShort& operator=(const dbShort& rhs) { dbShort::operator=(rhs); return *this; };
  416. };
  417.  
  418.  
  419. class oofUshort : public dbUshort
  420. {
  421. public:
  422.      oofUshort() : dbUshort(dbField::eFieldIsStandalone) {}; 
  423.      oofUshort(const dbUshort& rhs) : dbUshort(dbField::eFieldIsStandalone) { dbUshort::operator=(rhs); }; 
  424.     virtual ~oofUshort() {};
  425.     
  426.     oofUshort& operator=(const oofUshort& rhs) { dbUshort::operator=(rhs); return *this; };
  427.     oofUshort& operator=(const dbUshort& rhs) { dbUshort::operator=(rhs); return *this; };
  428. };
  429.  
  430.  
  431. class oofReal : public dbReal
  432. {
  433. public:
  434.      oofReal() : dbReal(dbField::eFieldIsStandalone) {}; 
  435.      oofReal(const dbReal& rhs) : dbReal(dbField::eFieldIsStandalone) { dbReal::operator=(rhs); }; 
  436.     virtual ~oofReal() {};
  437.     
  438.     oofReal& operator=(const oofReal& rhs) { dbReal::operator=(rhs); return *this; };
  439.     oofReal& operator=(const dbReal& rhs) { dbReal::operator=(rhs); return *this; };
  440. };
  441.  
  442.  
  443.  
  444. // include inline definitions
  445. #include "oof4.inl"
  446. #endif
  447.